﻿#define _CRT_SECURE_NO_WARNINGS
#if 0
//int main()
//{
//	int a = 0;
//	int* p = &a;
//	char* p1 = &a;
//	printf("%p %p \n p+1=%p p1+1 =%p", p, p1,p+1,p1+1);
//	return 0;
//}
//int main()
//{
//	int a = 0;
//	int* p = &a;
//	printf("%d", *p);
//	return 0;
//}
//int main()
//{
//	int arr[5] = { 1,2,3,4,5 };
//	printf("%d ", &arr[4] - &arr[0]);
//	return 0;
//}
//void init(int arr[])
//{
//	for (int i = 0; i < 4; i++)
//	{
//		arr[i] = i;
//	}
//}//初始化
//int main()
//{
//	int arr[4] = {0};
//	init(arr);
//	for(int i = 0;i<4;i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}
//int main()
//{
//	int arr1[] = { 1,2,3,4 };
//	int arr2[] = { 5,6,7,8 };
//	int arr3[] = { 9,10,11,12 };
//	int* arr[] = {arr1,arr2,arr3};
//	int sz1 = sizeof(arr) / sizeof(arr[0]);
//	int sz2 = sizeof(arr1) / sizeof(arr1[0]);
//	for (int i = 0; i < sz1; i++)
//	{
//		for (int j = 0; j < sz2; j++)
//		{
//			printf("%d ", *(*(arr + i) + j));
//		}
//		printf("\n");
//	}
//	return 0;
//}
//int main()
//{
//	char* p = "abcd";//这是常量字符串
//	
//	char f[] = "abcd";//字符数组
//	char* f1 = &f;
//	*p = 'c';
//	*f1 = 'c';
//	printf("%s   %s", p, f1);
//	return 0;
//}
//void print(int (*p)[3], int r, int c)
//{
//	for (int i = 0; i < r; i++)
//	{
//		for (int j = 0; j < c; j++)
//		{
//			printf("%d ", *(*(p + i) + j));
//		}
//		printf("\n");
//	}
//}
//int main()
//{
//	int arr[2][3] = { {1,2,3},{4,5,6} };
//	int r = 2, c = 3;
//	print(arr, r, c);
//	return 0;
//}
//int main()
//{
//	int arr[4] = { 0 };
//	int* p = &arr;
//	for (int i = 0; i < 4; i++)
//	{
//		*(p+i) = i;
//	}
//	for (int i = 0; i < 4; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//
//	return 0;
//}
//int Add(int a, int b)
//{
//	return a + b;
//}
//int main()
//{
//	int (*p)(int, int) = &Add;
//	int c = (*p)(3,5);
//	printf("%d ", c);
//	return 0;
//}
//int Sub(int a, int b)
//{
//	return a - b;
//}
//int Add(int a, int b)
//{
//	return a + b;
//}
//int main()
//{
//	printf("1,-    2,+\n");
//	int a = 0, b = 0;
//	int Sub(a, b);
//	int Add(a, b);
//	int (*p[2])(int, int) = { Sub,Add};
//	int c = 0;
//	scanf("%d", &c);
//	scanf("%d %d", &a, &b);
//	int e = p[c](a, b);
//	printf("%d", e);
//	return 0;
//}
//#include<stdlib.h>
//int sort_t(int* p1, int* p2)
//{
//	return *p1 - *p2;
//}
//int main()
//{
//	int arr[] = { 2,5,1,8,5,3,0,9,2,545 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	qsort(arr, sz, sizeof(arr[0]), sort_t);
//	for (int i = 0; i < sz; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//void Add(void)
//{
//	printf("a");
//}
//void Buff(void)
//{
//	printf("b");
//}
//int main()
//{
//	void(*arr[3])() = {0,Add,Buff};
//	for (int i = 1; i < 3; i++)
//	{
//		arr[i]();
//	}
//	Add();
//
//	return 0;
//}
//int main()
//{
//	/*if ('a' || 'b')
//	{
//		printf("ff");
//	}*/
//	int s = 0;
//	int b =  b&~b;
//	//printf("%d", -5/-3);
//	float a = 0;
//	scanf("%f", &a);
//	printf("%f",a);
//	return 0;
//}
//int main()
//{
//	char arr[20] = { 0 };
//	//scanf("%s", &arr);
//	//scanf("%c", &a);
//	char a = 0;
//	int i = 0;
//	while ((a = getchar()) != '\n')
//	{
//		arr[i] = a;
//		i++;
//	}
//
//	printf("%s", arr);
//	return 0;
//}
#include<ctype.h>
#include<string.h>
//int main()
//{
//    char arr[100] = { 0 };
//   //scanf("%s", &arr);
//    int a = 0;
//    char b = 0;
//    while (b = getchar())
//    {
//        if (b == '\n')
//            break;
//        arr[a] = b;
//        a++;
//    }
//    int i = 0;
//    while (arr[i])
//    {
//        if (isupper(arr[i]))
//            arr[i] = tolower(arr[i]);
//        else if (islower(arr[i]))
//            arr[i] = toupper(arr[i]);
//        i++;
//    }
//    printf("%s", arr);
//    return 0;
//}
//统计单词数
//int main()
//{
//    char arr[10000] = { 0 };
//    int a = 0;
//    char b = 0;
//    while (b = getchar())
//    {
//        arr[a] = b;
//        if (b == '\n')
//            break;
//        a++;
//    }
//    int i = 0;
//    int count = 0;
//    int str_long = 0;
//    int is_space = 0;
//    while (arr[i])
//    {
//        if (arr[i] != ' ')
//        {
//            str_long++;
//        }
//        if (arr[i] == ' ')
//            is_space++;
//        if ((arr[i] == ' ' && str_long > 1) || (arr[i] == '\n' && str_long > 1))
//        {
//            count++;
//            str_long = 0;
//            is_space = 0;
//        }
//        if (is_space > 1)
//        {
//            str_long = 0;
//            is_space = 0;
//        }
//        i++;
//    }
//    printf("%d", count);
//    return 0;
//}
#include<math.h>
//double dist(int x, int y)
//{
//	int div = 0;
//	div = x * x + y * y;
//	return sqrt(div);
//}
//int main()
//{
//	int arr[20] = { 0 };
//	int i = 0;
//	for(i = 0; i <20;i++)
//	scanf("%d", &arr[i]);
//	double sum = 0.0;
//	int times = 10;
//	i = 0;
//	while(times--)
//	{
//		sum += dist(arr[i], arr[i + 1]);
//		i += 2;
//	}
//	printf("%.6f", sum);
//	return 0;
//}
//union Jud
//{
//	char i;
//	int f ;
//};
//int judge()
//{
//	union Jud s = { 0 };
//	s.f = 1;
//	if (s.i == 1)
//	{
//		return 1;
//	}
//	else
//	{
//		return 0;
//	}
//}
//int main()
//{
//	int n = judge();
//	if (n == 1)
//	{
//		printf("小端");
//	}
//	else
//	{
//		printf("大端");
//	}
//	return 0;
//}
//int main()
//{
//    int a = 0;
//    scanf("%d", &a);
//    // 注意 while 处理多个 case
//    // 64 位输出请用 printf("%lld") to 
//    int arr[100] = { 0 };
//    for (int i = 0; i < a; i++)
//    {
//        scanf("%d", &arr[i]);
//    }
//    int del = 0;
//    scanf("%d", &del);
//    for (int i = 0; i < a; i++)
//    {
//        if (arr[i] == del)
//        {
//            printf("%d ", arr[i + 1]);
//            a -= 1;
//        }
//        else
//            printf("%d ", arr[i]);
//    }
//}
//int main()
//{
//	int arr[4] = { 0 };
//	printf("%d", arr[1]);
//	return 0;
//}
//malloc
#include<stdlib.h>
//int main()
//{
//	int n = 30;
//	//scanf("%d", &n);
//	//int* p = (int*)calloc(n, sizeof(int));//开辟10 * sizeof(int)个字节并初始化为0和malloc一样 成功返回该空间的地址 失败放返回NULLL
//	int* p = (int*)malloc(10* sizeof(int));//开辟100个字节 不会初始化
//	if (p == NULL)
//	{
//		perror("malloc");//看是否开辟成功
//		return 1;
//	}
//	//调整原空间大小
//	int* ptr = realloc(p, n*sizeof(int));//将p调整为20*4个字节 成功返回该空间地址 失败返回NULL 不会初始化
//	if (ptr == NULL)
//	{
//		perror("realloc");//打印错误
//		return 0; 
//	}
//	p = ptr;//反正失败了返回NULL导致原空间都没了
//	ptr = NULL;
//	for (int i = 0; i < 20; i++)
//	{
//		*(p + i)= i;//对这个空间进行赋值 这个空间相当与arr[10]
//	}
//	for (int i = 0; i < 20; i++)
//	{
//		printf("%d ", *(p + i));
//	}
//	free(p);
//	p = NULL;
//	free(p);//传NULL会不会有操作
//	return 0;
//}
/*int* getconcatenation(int* nums, int numssize, int* returnsize)
{
    int* ans = (int*)malloc(2 * numssize*sizeof(int));
    if (ans == NULL)
    {
        perror("calloc");
        return 1;
    }
    int n = 0;
    for (int i = 0; i < 2 * numssize; i++)
    {
        *(ans + i) = *(nums + n);
        n++;
        if (n == numssize)
            n = 0;
    }
    return ans;
}
int main()
{
    int arr[3] = { 1,2,3 };
    int* p = getconcatenation(arr, 3, 6);
    free(p);
    return 0;
}*/
//二维数组的开辟(动态内存开辟)
//int main()
//{
//	int* p = calloc(15, sizeof(int));
//	if (p == NULL)
//	{
//		perror("calloc");
//		return 1;
//	}
//	int* arr[3] = { p,p + 5,p + 10 };
//	for (int i = 0; i < 3; i++)
//	{
//		for (int j = 0; j < 5; j++)
//		{
//			arr[i][j] = j;
//		}
//	}
//	for (int i = 0; i < 3; i++)
//	{
//		for (int j = 0; j < 5; j++)
//		{
//			printf("%d ", arr[i][j]);
//		}
//		printf("\n");
//	}
//	return 0;
//}
int main()
{
    printf("%s\n", __FILE__);
    printf("%s\n", __DATE__);
    printf("%s\n", __TIME__);
    printf("%d\n", __LINE__);
    return 0;
}
#include<stddef.h>
//offsetof
struct S
{
    int a;
    char c;
    int b;
    char d;
};
#define My_offsetof(s,m) ((size_t)&(((s*)0)->m))
//                       将0强转为S的起始地址 然后m所在的地址就是其偏移量、
//                       在减地址强转为整形就得到了          
int main()
{
  int b =  My_offsetof(struct S, d);
   int a = offsetof(struct S, d);
   printf("%d %d", a,b);
    return 0;
}
//交换二进制奇数偶数位
#define EXCHANGE(n) (((n)&(0x5555555555))<<1)|\
                        (((n)&(0xaaaaaaaaaa))>>1)
int main()
{
    int a = EXCHANGE(13);
    printf("%d", a);
    return 0;
} 
int main()
{
    int n = 0;
    while (n++ < 5)
        printf("%d ",n);
}
//静态顺序表
struct ls
{
    int a[20];
    int size;//有效数据个数
};
int main()
{
    struct ls s;
    for (int i = 0; i < 20; i++)
    {
        s.a[i] = i;     
        printf("%d ", s.a[i]);
    }
    return 0;
}
#include<assert.h>
#include<stdlib.h>
//动态顺序表
typedef int Datatype;
struct ListNode
{
    Datatype size;//有效元素个数
    Datatype capacity;//能储存元素的数量
    Datatype* arr;//储存有效元素
};
void ListNode_Init(struct ListNode* p)
{
    p->arr = NULL;
    p->capacity = 0;
    p->size = 0;
}
void !ListNode_space(struct ListNode* p)
{
    assert(p);//p不能为空
    if (p->size == p->capacity)//空间不够了
    {
        Datatype newcapacity = p->capacity == 0 ? sizeof(Datatype) : 2 * p->capacity;
        struct ListNode* tmp = (struct ListNode*)realloc(p->arr,newcapacity * sizeof(Datatype));
        assert(tmp);
        p->arr = tmp;
        p->capacity = newcapacity;
        tmp = NULL;
    }
}
void ListNode_pushback(struct ListNode* p, Datatype n)
{
    //判断内存是否够
    ListNode_space(p);
    p->arr[p->size] = n;//储存数据
    p->size++;
}
int main()
{
    struct ListNode s;
    ListNode_Init(&s);
    ListNode_space(&s);
    int n = 10;
    while(n--)
    {
        ListNode_pushback(&s, n);
        printf("%d ", s.arr[s.size - 1]);
    }
        return 0;
}
int main()
{
    char* a = 'a';
    char* b = 'a';
    printf("%p %p", a, b);
    return 0;
}
#include<stdio.h>
#include<locale.h>
int main()
{
    setlocale(LC_ALL, "");
    //printf("ab\n哈");
    wchar_t ch = '▆';
    printf("□");
    //for(int )
    wprintf(L"%lc",L'￥');
    return 0;
}
int main()
{
    //printf("%d", 4 / 0);
  //  putchar('\15');
    //printf("%c", '/67');
    printf("%c#%c#", 'a', 'c');
}
int main()
{
    float eps = 0, n = 0;
    scanf("%f", &eps);
    int flag = 1, m = 3, k = -1;
    float sum = 1;
    while (flag)
    {
        n = 1.0 / m;
        if (n < eps)
        {
            flag = 0;
        }
        sum += k * n;
        m += 2, k = -k;
    }
    printf("%.4f", 4 * sum);
    return 0;
}
#endif 
#include<stdio.h>
#include<stdio.h>
int main()
{
    //获取俩行的输入
    char ch[100] = { 0 };
    char ch1[100] = { 0 };
    int i = 0;
    while ((ch[i++] = getchar()) != '\n')
        ;
    i = 0;
    while ((ch1[i++] = getchar()) != '\n')
        ;
    return 0;
}